package com.alien.admin.modules.deploy.service;

import com.alien.admin.modules.deploy.domain.DeployRec;
import com.alien.admin.modules.deploy.service.dto.DeployRecDto;
import com.alien.admin.modules.deploy.service.dto.DeployRecQueryCriteria;
import com.alien.admin.modules.publisher.service.dto.PublishSheetFlowDto;

public interface DeployService {

    /**
     * 创建部署
     * @param criteria 项目id
     * @return DeployRecDto
     */
    DeployRecDto createProjectDeploy(DeployRecQueryCriteria criteria);

    /**
     * 关联流程创建部署
     * @param flowDto 审核流程
     * @return DeployRecDto
     */
    void deployByFlow(PublishSheetFlowDto flowDto, String env);

    /**
     * 构建服务镜像
     * @param recId 构建流程id
     * @return DeployRecDto
     */
    DeployRec buildImage(Long recId);

    /**
     * 部署应用
     * @param recId 构建流程id
     * @return DeployRecDto
     */
    DeployRec deploy(Long recId);

    /**
     * 部署历史版本
     * @param recId 部署记录id
     * @return
     */
    DeployRec deployByHistory(Long recId);

    /**
     * 查看服务日志
     * @param projectId
     * @param env
     * @return
     */
    String queryLog(Integer projectId, String env);

    /**
     * 健康检查
     * @param projectId
     * @param env
     * @return
     */
    boolean healthCheck(Integer projectId, String env);

    /**
     * 分支回退
     */
    void rollbackBranch(PublishSheetFlowDto flowDto, String env);

    /**
     * 分支删除
     */
    void deleteBranch(PublishSheetFlowDto flowDto, String env);
}
